library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(p8105.datasets)
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout

Focus on NYC Airbnb data

data("nyc_airbnb")

nyc_airbnb =
  nyc_airbnb |>
  mutate( star = review_scores_location /2 ) |>
  select(
    borough = neighbourhood_group, 
    neighbourhood, 
    star, 
    price, 
    room_type, 
    lat, 
    long
  ) |>
  drop_na() |>
  filter(
    borough == "Manhattan",
    room_type == "Entire home/apt",
    price %in% 100:500
  )

Let’s make a scatterplot!

nyc_airbnb |>
  mutate(
    text_label = str_c("Price: $", price, "\nRating:", star)
  ) |>
  plot_ly(
    x = ~lat, y= ~long, color = ~price, text = ~text_label,
    type = "scatter", mode = "markers", alpha = 0.5
  )

Let’s make a boxplot next!

nyc_airbnb |>
  mutate(neighbourhood = fct_reorder(neighbourhood, price)) |>
  plot_ly(
    y = ~price, color = ~neighbourhood,
    type = "box", colors = "viridis"
  )

Let’s make a bar plot!

nyc_airbnb |>
  count(neighbourhood) |> 
  mutate(
    neighbourhood = fct_reorder(neighbourhood, n)
  ) |>
  plot_ly(
    x = ~neighbourhood, y = ~n, color = ~neighbourhood,
    type = "bar", colors = "viridis"
  )

ggplotly

Prof: don’t really use it

ggp_scatter =
  nyc_airbnb |>
  ggplot(aes(x = lat, y = long, color = price)) +
  geom_point()

ggplotly(ggp_scatter) #Convert